// Copyright 2007-2008 Rory Plaire (codekaizen@gmail.com)

using System;
using NPack.Interfaces;

namespace NPack
{
	/// <summary>
	/// A matrix component or matrix element which represents a complex number with a 
	/// <see cref="System.Single"/> real component and imaginary coefficient.
	/// </summary>
	/// <remarks>
	/// Use this structure as the type parameter for <see cref="Matrix{T}"/> when you want
	/// a matrix of single floating point complex values, since it implements <see cref="IComputable{T}"/>, 
	/// which allows numerical operations on value types.
	/// </remarks>
	public struct SingleComplexComponent : IEquatable<SingleComplexComponent>,
		IComparable<SingleComplexComponent>, IComputable<SingleComplexComponent>, IConvertible, IFormattable
	{
		#region IEquatable<SingleComplexComponent> Members

		public Boolean Equals(SingleComplexComponent other)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IComparable<SingleComplexComponent> Members

		public Int32 CompareTo(SingleComplexComponent other)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IComputable<SingleComplexComponent> Members

		public SingleComplexComponent Abs()
		{
			throw new NotImplementedException();
		}

		public SingleComplexComponent Set(Double value)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IAddable<SingleComplexComponent> Members

		public SingleComplexComponent Add(SingleComplexComponent b)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region ISubtractable<SingleComplexComponent> Members

		public SingleComplexComponent Subtract(SingleComplexComponent b)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IHasZero<SingleComplexComponent> Members

		public SingleComplexComponent Zero
		{
			get { throw new NotImplementedException(); }
		}

		#endregion

		#region INegatable<SingleComplexComponent> Members

		public SingleComplexComponent Negative()
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IMultipliable<SingleComplexComponent> Members

		public SingleComplexComponent Multiply(SingleComplexComponent b)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IDivisible<SingleComplexComponent> Members

		public SingleComplexComponent Divide(SingleComplexComponent b)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IHasOne<SingleComplexComponent> Members

		public SingleComplexComponent One
		{
			get { throw new NotImplementedException(); }
		}

		#endregion

		#region IBooleanComparable<SingleComplexComponent> Members

		public Boolean GreaterThan(SingleComplexComponent value)
		{
			throw new NotImplementedException();
		}

		public Boolean GreaterThanOrEqualTo(SingleComplexComponent value)
		{
			throw new NotImplementedException();
		}

		public Boolean LessThan(SingleComplexComponent value)
		{
			throw new NotImplementedException();
		}

		public Boolean LessThanOrEqualTo(SingleComplexComponent value)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IExponential<SingleComplexComponent> Members

		public SingleComplexComponent Power(Double power)
		{
			throw new NotImplementedException();
		}

		public SingleComplexComponent Sqrt()
		{
			throw new NotImplementedException();
		}

		public SingleComplexComponent Log(Double newBase)
		{
			throw new NotImplementedException();
		}

		public SingleComplexComponent Log()
		{
			throw new NotImplementedException();
		}

		public SingleComplexComponent Exp()
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IConvertible Members

		public TypeCode GetTypeCode()
		{
			throw new NotImplementedException();
		}

		public Boolean ToBoolean(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Byte ToByte(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Char ToChar(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public DateTime ToDateTime(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Decimal ToDecimal(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Double ToDouble(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Int16 ToInt16(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Int32 ToInt32(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Int64 ToInt64(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

        [CLSCompliant(false)]
		public SByte ToSByte(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Single ToSingle(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public String ToString(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		public Object ToType(Type conversionType, IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

        [CLSCompliant(false)]
		public UInt16 ToUInt16(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

        [CLSCompliant(false)]
		public UInt32 ToUInt32(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

        [CLSCompliant(false)]
		public UInt64 ToUInt64(IFormatProvider provider)
		{
			throw new NotImplementedException();
		}

		#endregion

		#region IFormattable Members

		public String ToString(String format, IFormatProvider formatProvider)
		{
			throw new NotImplementedException();
		}

		#endregion

        #region IComputable<SingleComplexComponent> Members


        public SingleComplexComponent SetFrom(SingleComplexComponent value)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
